www.gusucode.com > VC++ 基于IE内核功能很齐全的浏览器(支持多标签)-源码程序 > VC++ 基于IE内核功能很齐全的浏览器(支持多标签)-源码程序/code/Explorer/SourceDialog.cpp

    //Download by http://www.NewXing.com
// SourceDialog.cpp : implementation file
//

#include "stdafx.h"
#include "SourceDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSourceDialog dialog


CSourceDialog::CSourceDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CSourceDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSourceDialog)
	//}}AFX_DATA_INIT
}

void CSourceDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSourceDialog)
	DDX_Control(pDX, IDC_EDIT_SOURCE, m_RTE);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSourceDialog, CDialog)
	//{{AFX_MSG_MAP(CSourceDialog)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSourceDialog message handlers

void CSourceDialog::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	CRect	rect;

	if(m_RTE.GetSafeHwnd())
	{
		GetClientRect(&rect);
		m_RTE.MoveWindow(&rect);
	}
}

void CSourceDialog::ShowSource(MSHTML::IHTMLDocument2Ptr ptrDoc)
{
	HGLOBAL				hMem = NULL;
	LPSTREAM			pStream = NULL;
	IPersistStreamInit	*pPersistStream = NULL;
	ULARGE_INTEGER		uli;
	HRESULT				hr;
	hr = ptrDoc.QueryInterface(IID_IPersistStreamInit, &pPersistStream);
	if(pPersistStream == NULL)
		return;
	if(FAILED(pPersistStream->GetSizeMax(&uli)))
	{
		pPersistStream->Release();
		return;
	}
	//if(uli.LowPart == 0)
	//{
		//pPersistStream->Release();
		//return;
	//}

	uli.LowPart = 65536;
	hMem = ::GlobalAlloc(GPTR, uli.LowPart);
	if(hMem == NULL)
	{
		pPersistStream->Release();
		return;
	}

	hr = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream);
	if(FAILED(hr))
	{
		pPersistStream->Release();
		::GlobalFree(hMem);
		return;
	}
	hr = pPersistStream->Save(pStream, TRUE);
	
	//AfxMessageBox((LPCTSTR)hMem);
	SendMessage(WM_SIZE);
	
	m_RTE.SetWindowText((LPCTSTR)hMem);
	m_RTE.SetSel(0, 0);
	hr = pPersistStream->Release();
	pStream->Release();	
}

void CSourceDialog::PostNcDestroy() 
{
	delete this;

	CDialog::PostNcDestroy();
}